diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index 25e5963..1896787 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -45,13 +45,13 @@
 	var	$validate		= FALSE;	// TRUE/FALSE.  Enables email validation
 	var	$priority		= "3";		// Default priority (1 - 5)
 	var	$newline		= "\n";		// Default newline. "\r\n" or "\n" (Use "\r\n" to comply with RFC 822)
-
 	var $crlf			= "\n";		// The RFC 2045 compliant CRLF for quoted-printable is "\r\n".  Apparently some servers,
 									// even on the receiving end think they need to muck with CRLFs, so using "\n", while
 									// distasteful, is the only thing that seems to work for all environments.
-
+	var $send_multipart	= TRUE;		// TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override.  Set to FALSE for Yahoo.	
 	var	$bcc_batch_mode	= FALSE;	// TRUE/FALSE  Turns on/off Bcc batch feature
 	var	$bcc_batch_size	= 200;		// If bcc_batch_mode = TRUE, sets max number of Bccs in each batch
+	var $_safe_mode		= FALSE;
 	var	$_subject		= "";
 	var	$_body			= "";
 	var	$_finalbody		= "";
@@ -59,8 +59,7 @@
 	var	$_atc_boundary	= "";
 	var	$_header_str	= "";
 	var	$_smtp_connect	= "";
-	var	$_encoding		= "8bit";
-	var $_safe_mode		= FALSE;
+	var	$_encoding		= "8bit";	
 	var $_IP			= FALSE;
 	var	$_smtp_auth		= FALSE;
 	var $_replyto_flag	= FALSE;
@@ -90,6 +89,9 @@
 			$this->initialize($config);
 		}	
 
+		$this->_smtp_auth = ($this->smtp_user == '' AND $this->smtp_pass == '') ? FALSE : TRUE;			
+		$this->_safe_mode = ((boolean)@ini_get("safe_mode") === FALSE) ? FALSE : TRUE;
+
 		log_message('debug', "Email Class Initialized");
 	}
 
@@ -121,8 +123,6 @@
 				}			
 			}
 		}
-		$this->_smtp_auth = ($this->smtp_user == '' AND $this->smtp_pass == '') ? FALSE : TRUE;			
-		$this->_safe_mode = ((boolean)@ini_get("safe_mode") === FALSE) ? FALSE : TRUE;
 	}
   	
 	// --------------------------------------------------------------------
@@ -372,20 +372,10 @@
 	function _str_to_array($email)
 	{
 		if ( ! is_array($email))
-		{	
-			if (ereg(',$', $email))
-				$email = substr($email, 0, -1);
-			
-			if (ereg('^,', $email))
-				$email = substr($email, 1);	
-					
-			if (ereg(',', $email))
-			{					
-				$x = explode(',', $email);
-				$email = array();
-				
-				for ($i = 0; $i < count($x); $i ++)
-					$email[] = trim($x[$i]);
+		{
+			if (strpos($email, ',') !== FALSE)
+			{
+				$email = preg_split('/[\s,]/', $email, -1, PREG_SPLIT_NO_EMPTY);
 			}
 			else
 			{				
@@ -665,10 +655,7 @@
 	 */	
 	function valid_email($address)
 	{
-		if ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address))
-			return FALSE;
-		else
-			return TRUE;
+		return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address)) ? FALSE : TRUE;
 	}
   	
 	// --------------------------------------------------------------------
@@ -691,7 +678,7 @@
 		}
 			
 		$clean_email = array();
-		
+
 		foreach ($email as $addy)
 		{
 			if (preg_match( '/\<(.*)\>/', $addy, $match))
@@ -726,11 +713,10 @@
 		{
 			return $this->word_wrap($this->alt_message, '76');
 		}
-	
-		if (eregi( '\<body(.*)\</body\>', $this->_body, $match))
+		
+		if (preg_match('/\<body.*?\>(.*)\<\/body\>/si', $this->_body, $match))
 		{
 			$body = $match['1'];
-			$body = substr($body, strpos($body, ">") + 1);
 		}
 		else
 		{
@@ -940,30 +926,47 @@
 			
 			break;
 			case 'html' :
-								
-				$hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline;
-				$hdr .= $this->_get_mime_message() . $this->newline . $this->newline;
-				$hdr .= "--" . $this->_alt_boundary . $this->newline;
+							
+				if ($this->send_multipart === FALSE)
+				{
+					$hdr .= "Content-Type: text/html;". $this->newline;
+				}
+				else
+				{					
+					$hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline;
+					$hdr .= $this->_get_mime_message() . $this->newline . $this->newline;
+					$hdr .= "--" . $this->_alt_boundary . $this->newline;
+					
+					$hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
+					$hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
+					$hdr .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;
 				
-				$hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
-				$hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
-				$hdr .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;
-			
-				$hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
-				$hdr .= "Content-Transfer-Encoding: quoted-printable";
+					$hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
+					$hdr .= "Content-Transfer-Encoding: quoted-printable";
+				}
 				
 				$this->_body = $this->_prep_quoted_printable($this->_body);
 				
 				if ($this->_get_protocol() == 'mail')
 				{
 					$this->_header_str .= $hdr;
-					$this->_finalbody = $this->_body . $this->newline . $this->newline . "--" . $this->_alt_boundary . "--";
+					$this->_finalbody = $this->_body . $this->newline . $this->newline;
+					
+					if ($this->send_multipart !== FALSE)
+					{
+						$this->_finalbody .= "--" . $this->_alt_boundary . "--";
+					}
 					
 					return;
 				}
 				
 				$hdr .= $this->newline . $this->newline;
-				$hdr .= $this->_body . $this->newline . $this->newline . "--" . $this->_alt_boundary . "--";
+				$hdr .= $this->_body . $this->newline . $this->newline;
+				
+				if ($this->send_multipart !== FALSE)
+				{
+					$hdr .= "--" . $this->_alt_boundary . "--";
+				}
 
 				$this->_finalbody = $hdr;
 				return;
@@ -1443,7 +1446,6 @@
 	 */	
 	function _smtp_connect()
 	{
-	
 		$this->_smtp_connect = fsockopen($this->smtp_host,
 										$this->smtp_port,
 										$errno,
@@ -1613,7 +1615,7 @@
 			$data .= $str;
 			
 			if (substr($str, 3, 1) == " ")
-				break; 	
+				break;
 		}
 		
 		return $data;
